﻿/*
 *
 * index.html 에 현재 이 파일 포함 시켜 놓았습니다.
 * 이곳에 andorid , ios 각각 필요한 펑션을 정의 하고
 * http://121.162.170.243:8787/JustWar/android  <- android
 * http://121.162.170.243:8787/JustWar/ios <- ios
 * 위의 주소로 각각 접근하면 테스트 가능합니다.
 * 파일명은 임시로 common_android.js 정했고, 여기에 클래스별로 정의를 해두면 나중에 필요에따라
 * 잘라서 각자 파일로 만들도록 하겟습니다.
 * 기타 불편한 사항은 전화로도 연락주시면 바로 처리해드릴 수 있도로 하겠습니다.
 *
 */


var common = {
	/*
	 * Apply inappbilling service use custom plugin
     * 안드로이드 인앱 결제모듈 플러그인 초기화 코드입니다.
     * 주석만 제거하면 네이티브에 있는 플러그인을 이용하여 초기화를 수행합니다.
     * www/js/inApp/inappbilling.js 파일을 추가하여 수행합니다.
	 */
	initInAppBilling : function() {
		console.log('Common : initInAppBilling');
        //		inappbilling.init(successHandler, errorHandler);
	},
	/*
	 * Apply GCM(Google Cloud Message) service use custom plugin
     * Push 서비스를 이용하기 위해 초기화를 수행하는 부분입니다.
     * 주석을 제거하면 네이티브에 있는 플러그인을 이용하여 초기화를 수행합니다.
     * www/js/GCM/GCMPlugin.js 파일을 추가하여 수행합니다.
     * senderID : index.html 에서 넘어오는 파라메터이고, Google API 넘버입니다.
     *            귀사의 Google 계정에 있는 넘버를 사용하였습니다.
     * "GCM_Event" : GCM 서비스에서 사용하는 Callback 함수 이름입니다.
     *               이 파일 중간에 GCM_Event 함수가 구현되어있습니다.
     * Success, Fail : 서비스 등록 시 사용할 Callback 입니다.
	 */
	initGCMService : function(senderID) {
		console.log('Common : initGCMService');
        //		window.GCM.register(senderID, "GCM_Event", GCM_Success, GCM_Fail);
	},
	// Bind Event Listeners
    /*
     * 애플리케이션의 상태를 관리하기 위한 콜백을 등록합니다.
     * 현재는 네트워크 상태가 offline 으로 변하였을 때 Native Plugin을 호출하는 것만 구현되어있습니다.
     * 구체적인 처리 방법은 회의를 통해 결정하면 될 것 같습니다.
     */
	bindEvents : function() {
		document.addEventListener('pause', this.onPause, false);
		document.addEventListener('resume', this.onResume, false);
		document.addEventListener('online', this.onOnline, false);
		document.addEventListener('offline', this.onOffline, false);
	},
	onPause : function() {
		console.log('Common : onPause');
	},
	onResume : function() {
		console.log('Common : onResume');
	},
	onOnline : function() {
		console.log('Common : onOnline');
	},
	onOffline : function() {
		console.log('Common : onOffline');
		//
		// Called Native method that control application state.
		// ex) terminated or restore application state.
        //
        // 네이티브의 플러그인을 이용하여 Json 형태의 메시지를 보내주는 함수입니다.
        // 파라메터의 순서는 아래와 같습니다.
        // Cordova.exec(successCallback, failCallback, pluginName, action, message);
        //
        // PluginName : 네이티브 코드에 있는 클래스명과 동일합니다. 현재는 'BridgePlugin' 입니다.
        // Action : 1차적으로 어떤 이벤트를 처리하는지를 정해주는 Action 파라메터입니다.
        // Message : JSON 형태로 전송되는 메시지입니다. 여기에 여러 데이터를 보내어 처리를 할 수 있습니다.
        //
		return Cordova.exec(null, null, 'BridgePlugin',
                            'offline', [ {
                                        message : 'offline'
                                        } ]);
	}
};

function GCM_Event(e) {
    /*
     * GCM(Push) 서비스에서 이용하는 이벤트 리스너입니다.
     * 모든 GCM 서비스 메시지는 이 함수를 통해 메시지를 주고 받습니다.
     *
     * registerd : init후 GCM Plugin 에서 서비스 등록 성공 시 수행됩니다.
     * message : Push 메시지가 도착하면 수행됩니다.
     */
	console.log('GCM : Event');
    
	switch (e.event) {
        case 'registered':
            // This is where you would code to send the REGID and UDID to your
            // server for this device
            // you can include logic that save data(regid, udid) to server.
            /*
             * GCM 서비스에 등록이 정상적으로 되면 GCM 서비스를 이용하기 위한 regid와
             * 기기의 고유값인 udid가 넘어오게 됩니다.
             * 아래 log에 해당 값을 확인할 수 있게 해 놓았습니다.
             * 이 부분에 데이터베이스와 연동하는 로직을 넣으면 될 것 같습니다.
             */
            
            console.log('GCM_Registered regid : ' + e.regid);
            console.log('GCM_Registered udid : ' + e.udid);
            
            break
            
        case 'message':
            //
            // get Push Message Event Callback.
            // This message made in 'GCMIntentService.java' on 'onMessage' Method
            // use JSONObject
            // you can use this message to change game menu and ETC
            //
            /*
             * 네이티브 클래스 중 'GCMIntentService.java' 클래스가 있습니다.
             * 이 클래스에서 onMessage() 부분을 보시면 Json 형태로 메시지를 만들어 주는 것을 볼 수 있습니다.
             * 메시지의 형태는 서로 협의하여 정하면 될 것 같습니다.
             * 현재는 어떤 메시지가 오는지 확인할 수 있도록 alert 창을 띄우게 되어있습니다.
             * 이 부분에 Menu를 전환하는 코드를 넣으면 될 것 같습니다.
             */
            alert(e.message);
            break;
            
        case 'error':
            
            break;
            
        default:
            
            break;
	}
}

function COMMON_Event(e) {
    /*
     * 네이티브 플러그인에서 자바스크립트를 호출하기 위해 구현한 이벤트 리스너 함수입니다.
     * 함수명은 임의로 작성하였으며, 네이티브 클래스 중 'BridgePlugin.java' 에서
     * 이 이벤트 리스너를 이용하여 메시지를 전송하는 것을 볼 수 있습니다.
     * 어떤 메시지를 전송할지에 대해 협의 후 코드를 작성하면 될 것 같습니다.
     */
    console.log('Common Event');
	switch (e.event) {
        case 'offline':
            alert(e.message);
            break;
            
        case 'menubutton':
            // get Activity Button Event Callback
            // index 1 ~ 6
            // you include changemenu logic use index
            /*
             * 네이티브 버튼을 누르면 호출되는 부분입니다.
             * 임의적으로 버튼을 삽입했고, 버튼을 누르면 index 가 넘어오게 됩니다.
             */
            alert(e.index);
            gotoMenu(e.index);
            break;
            
        default:
            break;
	}
}

// GCM(Push) Service Registerd Success callback
function GCM_Success(e) {
	console.log('GCM : Success');
}

// GCM(Push) Service Registerd Fail callback
function GCM_Fail(e) {
	console.log('GCM : Fail');
}

function successHandler (result) {
    alert("SUCCESS: \r\n"+result );
}

function errorHandler (error) {
    alert("ERROR: \r\n"+error );
}

/*
 * When you close application this function is called
 */
window.onbeforeunload = function(e) {
    
	if (gApp.gcmregid.length > 0) {
		// The same routines are called for success/fail on the unregister. You
		// can make them unique if you like
		window.GCM.unregister(GCM_Success, GCM_Fail); // close the GCM
        
	}
};

/*
 * JavaScript -> Native Plugin 호출 방법
 *
 * Cordova.exec(successCallback, failCallback, pluginName, action, message);
 *
 * 호출을 원하는 부분에서 위와 같은 코드를 호출하면 됩니다.
 * Callback 함수를 작성 후 해당 위치에 넣어주시면 됩니다.
 * pluginName은 네이티브 코드에 작성되어있는 플러그인 클래스명을 넣어주면 됩니다.
 * Action은 네이티브에서 1차적으로 분기할 수 있는 Key입니다.
 * message는 JSON 형태로 전송되고, 네이티브에서 적절히 처리하면 됩니다.
 */

/*
 * JavaScript 에서 inApp 결제 호출 방법
 *
 * 
 *
 *
 */